package com.elong.android.specialhouse.utils;

import java.util.List;

/**
 * 验证方法实现工具
 *
 * @author LiuPeng
 * @attention 根据验证规则，验证通过返回true，验证不通过返回false
 * @attention 每个验证方法请标注对应的验证规则
 */
public class EVerifyString {
    // RULE_NUMBER 只能由数字组成
    private final static String REGEX_NUMBER = "^[0-9]+$";
    // RULE_TELNUMBER 9位数字 1开头
    private final static String REGEX_TELNUMBER = "^(1[0-9])\\d{9}";
    // RULE_NAME 只能有英文字母以及汉字组成
    private final static String REGEX_NAME = "^[/a-zA-Z\u4e00-\u9fa5]+$";
    // RULE_NAME 只能有英文字母
    private final static String REGEX_ENGLISHNAME = "^[/a-zA-Z]+$";
    // RULE_SPECIALCHARACTER 特殊字符集合
    private final static String CHARACTER_SPECIAL = "!@#$%^&*()_-+={}[]|\"':;?/>.<,~`0123456789～！×（）……＋|＝、〔〕｛｝：“；‘《》？，。、0123456789";
    // RULE_SPECIALCHARACTER 特殊字符集合(/除外)
    private final static String CHARACTER_SPECIAL_WITHOUTLEFTLINE = "!@#$%^&*()_-+={}[]|\"':;?>.<,~`0123456789～！×（）……＋|＝、〔〕｛｝：“；‘《》？，。、0123456789";
    // RULE_LIMITEDWORDS 敏感词集合
    private final static String[] WORDS_LIMITED = {"法轮功", "发轮功", "张三", "李四", "王五", "SB", "逼", "傻逼", "傻冒", "王八", "王八蛋", "混蛋",
            "你妈", "你大爷", "操你妈", "你妈逼", "先生", "小姐", "男士", "女士", "测试", "小沈阳", "丫蛋", "男人", "女人", "骚", "騒", "搔", "傻", "逼",
            "叉", "瞎", "屄", "屁", "性", "骂", "疯", "臭", "贱", "溅", "猪", "狗", "屎", "粪", "尿", "死", "肏", "骗", "偷", "嫖", "淫",
            "呆", "蠢", "虐", "疟", "妖", "腚", "蛆", "鳖", "禽", "兽", "屁股", "畸形", "饭桶", "脏话", "可恶", "吭叽", "小怂", "杂种", "娘养",
            "祖宗", "畜生", "姐卖", "找抽", "卧槽", "携程", "无赖", "废话", "废物", "侮辱", "精虫", "龟头", "残疾", "晕菜", "捣乱", "三八", "破鞋", "崽子",
            "混蛋", "弱智", "神经", "神精", "妓女", "妓男", "沙比", "恶性", "恶心", "恶意", "恶劣", "笨蛋", "他丫", "她丫", "它丫", "丫的", "给丫", "删丫",
            "山丫", "扇丫", "栅丫", "抽丫", "丑丫", "手机", "查询", "妈的", "犯人", "垃圾", "死鱼", "智障", "浑蛋", "胆小", "糙蛋", "操蛋", "肛门", "是鸡",
            "无赖", "赖皮", "磨几", "沙比", "智障", "犯愣", "色狼", "娘们", "疯子", "流氓", "色情", "三陪", "陪聊", "烤鸡", "下流", "骗子", "真贫", "捣乱",
            "磨牙", "磨积", "甭理", "尸体", "下流", "机巴", "鸡巴", "鸡吧", "机吧", "找日", "婆娘", "娘腔", "恐怖", "穷鬼", "捣乱", "破驴", "破罗", "妈必",
            "事妈", "神经", "脑积水", "事儿妈", "草泥马", "杀了铅笔", "J8", "s.b", "sb", "sbbt", "Sb＋Sb", "sb＋bt", "bt＋sb", " saorao", "SAORAO", "Fuck",
            "shit", "谢先生", "谢小姐", "蔡先生", "蔡小姐", "常先生", "常小姐", "陈先生", "陈小姐", "金先生", "金小姐", "孔先生", "孔小姐", "梁先生", "梁小姐",
            "陈女士", "崔先生", "崔小姐", "高先生", "高小姐", "高女士", "郭先生", "郭小姐", "郭女士", "黄先生", "黄小姐", "黄女士", "刘先生", "刘小姐", "刘女士",
            "李先生", "李小姐", "李女士", "王先生", "王小姐", "王女士", "朱先生", "朱小姐", "朱女士", "周先生", "周小姐", "周女士", "郑先生", "郑小姐", "郑女士",
            "赵先生", "赵小姐", "赵女士", "张先生", "张小姐", "张女士", "章先生", "章小姐", "杨先生", "杨小姐", "杨女士", "徐先生", "徐小姐", "徐女士", "许先生",
            "许小姐", "许女士", "贾先生", "贾小姐", "季先生", "季小姐", "康先生", "康小姐", "路先生", "路小姐", "马先生", "马小姐", "马女士", "彭先生", "彭小姐",
            "秦先生", "秦小姐", "任先生", "任小姐", "孙先生", "孙小姐", "谭先生", "谭小姐", "吴先生", "吴小姐", "叶先生", "叶小姐", "应先生", "应小姐", "于先生",
            "于小姐", "白先生", "白小姐", "包先生", "包小姐", "毕先生", "毕小姐", "曹先生", "曹小姐", "成先生", "成小姐", "程先生", "程小姐", "戴先生", "戴小姐",
            "邓先生", "邓小姐", "丁先生", "丁小姐", "董先生", "董小姐", "窦先生", "窦小姐", "杜先生", "杜小姐", "段先生", "段小姐", "方先生", "方小姐", "范先生",
            "范小姐", "冯先生", "冯小姐", "顾先生", "顾小姐", "古先生", "古小姐", "关先生", "关小姐", "管先生", "管小姐", "韩先生", "韩小姐", "潘先生", "潘小姐",
            "钱先生", "钱小姐", "齐先生", "齐小姐", "沈先生", "沈小姐", "石先生", "石小姐", "史先生", "史小姐", "宋先生", "宋小姐", "苏先生", "苏小姐", "唐先生",
            "唐小姐", "test", "ceshi", "郝先生", "郝小姐", "何先生", "何小姐", "贺先生", "贺小姐", "侯先生", "侯小姐", "胡先生", "胡小姐", "华先生", "华小姐",
            "江先生", "江小姐", "姜先生", "姜小姐", "蒋先生", "蒋小姐", "焦先生", "焦小姐", "金先生", "金小姐", "孔先生", "孔小姐", "梁先生", "梁小姐", "林先生",
            "林小姐", "罗先生", "罗小姐", "孟先生", "孟小姐", "牛先生", "牛小姐"};
    private final static String[] WORDS_LIMITED_ADN_SYMBOL = {"法轮功","发轮功", "SB", "逼", "傻逼", "傻冒", "王八", "王八蛋", "混蛋",
            "你妈", "你大爷", "操你妈", "你妈逼", "骚", "騒", "搔", "傻", "逼", "叉", "瞎", "屄", "屁", "性", "骂", "疯", "臭", "贱",
            "溅", "猪", "狗", "屎", "粪", "尿", "死", "肏", "骗", "偷", "嫖", "淫", "呆", "蠢", "虐", "疟", "妖", "腚", "蛆", "鳖", "禽",
            "兽", "屁股", "畸形", "饭桶", "脏话", "可恶", "吭叽", "小怂", "杂种", "娘养", "祖宗", "畜生", "姐卖", "找抽", "卧槽", "携程",
            "无赖", "废话", "废物", "侮辱", "精虫", "龟头", "残疾", "晕菜", "捣乱", "三八", "破鞋", "崽子", "混蛋", "弱智", "神经",
            "神精", "妓女", "妓男", "沙比", "恶性", "恶心", "恶意", "恶劣", "笨蛋", "他丫", "她丫", "它丫", "丫的", "给丫", "删丫",
            "山丫", "扇丫", "栅丫", "抽丫", "丑丫", "妈的", "犯人", "垃圾", "死鱼", "智障", "浑蛋", "胆小", "糙蛋", "操蛋", "肛门",
            "是鸡", "无赖", "赖皮", "磨几", "沙比", "智障", "犯愣", "色狼", "娘们", "疯子", "流氓", "色情", "三陪", "陪聊", "烤鸡",
            "下流", "骗子", "真贫", "捣乱", "磨牙", "磨积", "甭理", "尸体", "下流", "机巴", "鸡巴", "鸡吧", "机吧", "找日", "婆娘",
            "娘腔", "恐怖", "穷鬼", "捣乱", "破驴", "破罗", "妈必", "事妈", "神经", "脑积水", "事儿妈", "草泥马", "杀了铅笔",
            "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J8", "s.b", "sb", "sbbt", "Sb＋Sb", "sb＋bt", "bt＋sb",
            " saorao", "SAORAO", "Fuck", "shit", "0", "\\*", "\\/", "\\.", "\\(", "\\)", "（", "）", ":", ";", "-", "_", "－"};
    // RULE_EMAIL 邮箱格式
    private final static String REGEX_EMAIL = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";

    /**
     * 正则表达验证规则
     *
     * @return
     * @category param s
     */
    private static boolean useRegex(String s, String regex) {
        return s.matches(regex);
    }

    /**
     * 是否由数字构成
     *
     * @return true=数字组成的字符串
     */
    public static boolean isNumberStr(String s) {
        return useRegex(s, REGEX_NUMBER);
    }

    /**
     * 9位数字组成的号码且第一位是1
     *
     * @param s
     * @return
     */
    public static boolean isMobileNumber(String s) {
        return useRegex(s, REGEX_TELNUMBER);
    }

    /**
     * 姓名规则：字符串由英文字母（大小写）以及汉子组成
     *
     * @param s
     * @return
     */
    public static boolean isNameByEnOrCn(String s) {
        return useRegex(s, REGEX_NAME);
    }

    /**
     * 英文姓名规则：字符串由英文字母（大小写）组成
     *
     * @param s
     * @return
     */
    public static boolean isNameByEn(String s) {
        return useRegex(s, REGEX_ENGLISHNAME);
    }

    /**
     * Email?
     *
     * @param s
     * @return
     */
    public static boolean isEmail(String s) {
        return useRegex(s, REGEX_EMAIL);
    }

    /**
     * 验证是否含特殊字符
     *
     * @param s
     * @return true=含有非法字符
     */
    public static boolean containsIllegalWord(String s) {
        for (int len = CHARACTER_SPECIAL.length(), i = 0; i < len; i++) {
            if (s.indexOf(CHARACTER_SPECIAL.charAt(i)) >= 0)
                return true;
        }
        return false;
    }

    /**
     * 验证是否含除/外的特殊字符
     *
     * @param s
     * @return true=含有除/外的非法字符
     */
    public static boolean containsIllegalWordWithoutLeftLine(String s) {
        for (int len = CHARACTER_SPECIAL_WITHOUTLEFTLINE.length(), i = 0; i < len; i++) {
            if (s.indexOf(CHARACTER_SPECIAL_WITHOUTLEFTLINE.charAt(i)) >= 0)
                return true;
        }
        return false;
    }

    /**
     * 验证是否含敏感词
     *
     * @param s
     * @return true=含有非法字符
     */
    public static boolean containsLimitedWords(String s) {
        for (String word : WORDS_LIMITED) {
            if (s.toLowerCase().contains(word.toLowerCase()))
                return true;
        }
        return false;
    }
    /**
     * 验证是否含敏感词
     *
     * @param s
     * @return true=含有非法字符
     */
    public static boolean containsLimitedWordsAndSymbol(String s) {
        for (String word : WORDS_LIMITED_ADN_SYMBOL) {
            if (s.toLowerCase().contains(word.toLowerCase()))
                return true;
        }
        return false;
    }

    /**
     * 校验是否有相同内容
     *
     * @param names
     * @return
     * @attention 忽略大小写
     */
    public static boolean sameContent(List<String> names) {
        int size = names.size();
        if (size <= 1) {
            return false;
        }

        for (int i = 1; i <= size - 1; i++) {
            for (int j = 0; j < i; j++) {
                if (names.get(i).equalsIgnoreCase(names.get(j))) {
                    return true;
                }
            }
        }
        return false;
    }
}
